#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
省份地理边界数据处理示例脚本

此脚本展示了如何使用gis模块中的功能来处理省份地理边界数据。
包括读取shapefile、提取边界数据、创建可视化地图和生成HTML报告。
"""

import os
import sys

# 添加父目录到sys.path，确保可以导入gis包
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

from scripts.gis.province_utils import (
    read_province_shapefile,
    filter_provinces,
    extract_province_bounds,
    create_province_map,
    generate_html_report,
    process_province_data
)


def example_full_process():
    """
    示例1: 使用process_province_data函数一次性完成所有处理
    """
    print("\n示例1: 使用process_province_data函数一次性完成所有处理")
    print("-" * 60)
    
    # 指定要提取的省份列表
    target_provinces = [
        '黑龙江', '新疆', '山西', '宁夏', '山东', '河南', '吉林', '辽宁', 
        '天津', '青海', '陕西', '内蒙古', '河北', '北京', '甘肃'
    ]
    
    # 读取省份shapefile文件
    shp_path = r'd:\Workspace\Meicao\wangrui\dry-wet-abrupt\GS(2023)2767审图号\省面.shp'
    
    # 设置输出目录
    output_dir = r'/scripts/gis\output'
    os.makedirs(output_dir, exist_ok=True)
    
    # 处理省份数据
    result = process_province_data(
        shp_path=shp_path,
        target_provinces=target_provinces,
        output_dir=output_dir,
        csv_filename='example1_province_bounds.csv',
        map_filename='example1_province_map.png',
        html_filename='example1_province_report.html'
    )
    
    print("\n输出文件:")
    for key, path in result.items():
        print(f"- {key}: {path}")


def example_step_by_step():
    """
    示例2: 逐步执行处理过程，展示更多控制选项
    """
    print("\n示例2: 逐步执行处理过程，展示更多控制选项")
    print("-" * 60)
    
    # 指定要提取的省份列表
    target_provinces = ['北京', '上海', '广东', '浙江', '江苏']
    
    # 读取省份shapefile文件
    shp_path = r'd:\Workspace\Meicao\wangrui\dry-wet-abrupt\GS(2023)2767审图号\省面.shp'
    
    # 设置输出目录
    output_dir = r'/scripts/gis\output'
    os.makedirs(output_dir, exist_ok=True)
    
    # 步骤1: 读取shapefile
    print("\n步骤1: 读取shapefile")
    gdf = read_province_shapefile(shp_path)
    
    # 步骤2: 筛选目标省份
    print("\n步骤2: 筛选目标省份")
    filtered_gdf = filter_provinces(gdf, target_provinces)
    
    # 步骤3: 提取边界数据
    print("\n步骤3: 提取边界数据")
    result_df = extract_province_bounds(filtered_gdf)
    
    # 打印结果
    print("\n省份经纬度范围:")
    for idx, row in result_df.iterrows():
        print(f"{row['省份']} ({row['全称']}): 经度 {row['经度范围']}, 纬度 {row['纬度范围']}")
    
    # 步骤4: 保存CSV文件
    csv_path = os.path.join(output_dir, 'example2_province_bounds.csv')
    result_df.to_csv(csv_path, index=False, encoding='utf-8-sig')
    print(f"\n省份边界数据已保存到: {csv_path}")
    
    # 步骤5: 创建地图
    print("\n步骤5: 创建地图")
    map_path = os.path.join(output_dir, 'example2_province_map.png')
    create_province_map(gdf, filtered_gdf, map_path, figsize=(12, 8), dpi=200)
    
    # 步骤6: 生成HTML报告
    print("\n步骤6: 生成HTML报告")
    html_path = os.path.join(output_dir, 'example2_province_report.html')
    generate_html_report(result_df, map_path, html_path)
    
    print("\n输出文件:")
    print(f"- CSV文件: {csv_path}")
    print(f"- 地图文件: {map_path}")
    print(f"- HTML报告: {html_path}")


def example_custom_output():
    """
    示例3: 自定义输出格式
    """
    print("\n示例3: 自定义输出格式")
    print("-" * 60)
    
    # 指定要提取的省份列表
    target_provinces = ['西藏', '青海', '新疆', '四川', '云南']
    
    # 读取省份shapefile文件
    shp_path = r'd:\Workspace\Meicao\wangrui\dry-wet-abrupt\GS(2023)2767审图号\省面.shp'
    
    # 设置输出目录
    output_dir = r'/scripts/gis\output'
    os.makedirs(output_dir, exist_ok=True)
    
    # 读取shapefile并提取数据
    gdf = read_province_shapefile(shp_path)
    filtered_gdf = filter_provinces(gdf, target_provinces)
    result_df = extract_province_bounds(filtered_gdf)
    
    # 自定义输出: 创建纯文本表格
    txt_path = os.path.join(output_dir, 'example3_province_bounds_table.txt')
    
    with open(txt_path, 'w', encoding='utf-8') as f:
        # 写入表头
        f.write("省份名称       经度范围                  纬度范围\n")
        f.write("-" * 60 + "\n")
        
        # 写入数据行
        for idx, row in result_df.iterrows():
            f.write(f"{row['省份']:<12} {row['经度范围']:<25} {row['纬度范围']:<25}\n")
    
    print(f"\n自定义文本表格已保存到: {txt_path}")
    
    # 自定义输出: 创建JSON文件
    json_path = os.path.join(output_dir, 'example3_province_bounds.json')
    result_df.to_json(json_path, orient='records', force_ascii=False, indent=2)
    print(f"JSON文件已保存到: {json_path}")


if __name__ == '__main__':
    print("省份地理边界数据处理示例")
    print("=" * 60)
    
    # 运行示例1
    example_full_process()
    
    # 运行示例2
    example_step_by_step()
    
    # 运行示例3
    example_custom_output()
    
    print("\n所有示例已完成!")